home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / DriPen.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  8KB  |  243 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   DriPen.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   06-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   06-Oct-91     1.00            Screen DriPen editor.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data
  23.  */
  24. extern ULONG                Class;
  25. extern UWORD                Code;
  26. extern struct Gadget       *Object;
  27. extern APTR                 MainVisualInfo;
  28. extern struct TextAttr      Topaz80;
  29. extern struct Screen       *MainScreen;
  30. extern struct Window       *MainWindow;
  31. extern UWORD                MainDriPen[ NUMDRIPENS + 1 ];
  32. extern struct DrawInfo     *MainDrawInfo;
  33. extern BOOL                 Saved;
  34.  
  35. /*
  36.  * --- Gadget ID's
  37.  */
  38. #define GD_PEN              0
  39. #define GD_PENSELECT        1
  40. #define GD_OK               2
  41. #define GD_CANCEL           3
  42.  
  43. /*
  44.  * --- Module data
  45.  */
  46. struct Window              *dpWnd    = NULL;
  47. struct Gadget              *dpGList  = NULL;
  48. struct Gadget              *dpGadgets[2];
  49.  
  50. WORD                        dpZoom[4];
  51.  
  52. UWORD                       dpPens[ NUMDRIPENS + 1 ];
  53.  
  54. UBYTE                      *PenText[] = {
  55.     "DETAILPEN", "BLOCKPEN", "TEXTPEN", "SHINEPEN", "SHADOWPEN",
  56.     "FILLPEN", "FILLTEXTPEN", "BACKGROUNDPEN", "HIGHLIGHTTEXTPEN", 0l };
  57.  
  58. struct TagItem              dpnwTags[] = {
  59.     WA_Left,                0l,
  60.     WA_Top,                 0l,
  61.     WA_Width,               0l,
  62.     WA_Height,              0l,
  63.     WA_IDCMP,               IDCMP_CLOSEWINDOW | CYCLEIDCMP | BUTTONIDCMP  | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
  64.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_RMBTRAP,
  65.     WA_Gadgets,             0l,
  66.     WA_Title,               "Edit Screen DriPens:",
  67.     WA_AutoAdjust,          TRUE,
  68.     WA_Zoom,                (Tag)dpZoom,
  69.     WA_CustomScreen,        0l,
  70.     TAG_DONE };
  71.  
  72. /*
  73.  * --- Open the Edit DriPens requester.
  74.  */
  75. long EditDriPens( void )
  76. {
  77.     struct Gadget       *g;
  78.     struct ExtNewGadget *e;
  79.     struct NewGadget     ng;
  80.     BOOL                 running = TRUE, ok = FALSE;
  81.     WORD                 l, t, w, h, btop, bleft;
  82.     UWORD                penno = 0l, cnt;
  83.  
  84.     btop  = MainScreen->WBorTop + 1 + MainScreen->RastPort.TxHeight;
  85.     bleft = MainScreen->WBorLeft;
  86.  
  87.     w = bleft + MainScreen->WBorRight  + 298;
  88.     h = btop  + MainScreen->WBorBottom + 95;
  89.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  90.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  91.  
  92.     dpZoom[0] = 0;
  93.     dpZoom[1] = btop;
  94.     dpZoom[2] = 200;
  95.     dpZoom[3] = btop;
  96.  
  97.     dpnwTags[0 ].ti_Data = l;
  98.     dpnwTags[1 ].ti_Data = t;
  99.     dpnwTags[2 ].ti_Data = w;
  100.     dpnwTags[3 ].ti_Data = h;
  101.     dpnwTags[10].ti_Data = (Tag)MainScreen;
  102.  
  103.     CopyMem(( void * )MainDrawInfo->dri_Pens, (void * )&dpPens[0], NUMDRIPENS << 1);
  104.  
  105.     if ( g = CreateContext( &dpGList ))  {
  106.  
  107.         ng.ng_LeftEdge      =   bleft + 8;
  108.         ng.ng_TopEdge       =   btop + 16;
  109.         ng.ng_Width         =   282;
  110.         ng.ng_Height        =   13;
  111.         ng.ng_GadgetText    =   "_Pens";
  112.         ng.ng_TextAttr      =   &Topaz80;
  113.         ng.ng_GadgetID      =   GD_PEN;
  114.         ng.ng_Flags         =   PLACETEXT_ABOVE;
  115.         ng.ng_VisualInfo    =   MainVisualInfo;
  116.         ng.ng_UserData      =   0l;
  117.  
  118.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, (Tag)&PenText[0], GTCY_Active, 0l, GT_Underscore, '_', TAG_DONE );
  119.  
  120.         dpGadgets[ GD_PEN ] = g;
  121.  
  122.         ng.ng_TopEdge       =   btop + 33;
  123.         ng.ng_Height        =   40;
  124.         ng.ng_GadgetText    =   0l;
  125.         ng.ng_GadgetID      =   GD_PENSELECT;
  126.  
  127.         g = CreateGadget( PALETTE_KIND, g, &ng, GTPA_Depth, (Tag)MainScreen->BitMap.Depth, GTPA_Color, (Tag)MainDrawInfo->dri_Pens[0], GTPA_IndicatorWidth, 50l, TAG_DONE );
  128.  
  129.         dpGadgets[ GD_PENSELECT ] = g;
  130.  
  131.         ng.ng_TopEdge       =   btop + 78;
  132.         ng.ng_Height        =   13;
  133.         ng.ng_Width         =   90;
  134.         ng.ng_GadgetText    =   "_OK";
  135.         ng.ng_Flags         =   PLACETEXT_IN;
  136.         ng.ng_GadgetID      =   GD_OK;
  137.  
  138.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  139.  
  140.         ng.ng_LeftEdge      =   bleft + 200;
  141.         ng.ng_GadgetText    =   "_CANCEL";
  142.         ng.ng_GadgetID      =   GD_CANCEL;
  143.  
  144.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  145.  
  146.         if ( g ) {
  147.  
  148.             dpnwTags[6].ti_Data = (Tag)dpGList;
  149.  
  150.             if ( dpWnd = OpenWindowTagList( 0l, dpnwTags )) {
  151.  
  152.                 dpZoom[0] = l;
  153.                 dpZoom[1] = t;
  154.                 dpZoom[2] = w;
  155.                 dpZoom[3] = h;
  156.  
  157.                 GT_RefreshWindow( dpWnd, 0l );
  158.  
  159.                 do {
  160.                     WaitPort( dpWnd->UserPort );
  161.  
  162.                     while ( ReadIMsg( dpWnd )) {
  163.  
  164.                         switch ( Class ) {
  165.  
  166.                             case    IDCMP_REFRESHWINDOW:
  167.                                 GT_BeginRefresh( dpWnd );
  168.                                 GT_EndRefresh( dpWnd, TRUE );
  169.                                 break;
  170.  
  171.                             case    IDCMP_CLOSEWINDOW:
  172.                                 running = FALSE;
  173.                                 break;
  174.  
  175.                             case    IDCMP_GADGETUP:
  176.                                 switch( Object->GadgetID ) {
  177.  
  178.                                     case    GD_PEN:
  179.                                         if ( penno++ == 8 )
  180.                                             penno = 0;
  181.                                         setIt:
  182.                                         GT_SetGadgetAttrs( dpGadgets[ GD_PENSELECT ], dpWnd, 0l, GTPA_Color, MainDrawInfo->dri_Pens[ penno ], TAG_DONE );
  183.                                         break;
  184.  
  185.                                     case    GD_PENSELECT:
  186.                                         dpPens[ penno ] = Code;
  187.                                         break;
  188.  
  189.                                     case    GD_OK:
  190.                                         Ok:
  191.                                         ok = TRUE;
  192.  
  193.                                     case    GD_CANCEL:
  194.                                         Cancel:
  195.                                         running = FALSE;
  196.                                         break;
  197.                                 }
  198.                                 break;
  199.  
  200.                             case    IDCMP_VANILLAKEY:
  201.                                 switch( Code ) {
  202.  
  203.                                     case    'p':
  204.                                         if ( penno++ == 8 )
  205.                                             penno = 0;
  206.  
  207.                                         GT_SetGadgetAttrs( dpGadgets[ GD_PEN ], dpWnd, 0l, GTCY_Active, (Tag)penno, TAG_DONE );
  208.                                         goto setIt;
  209.  
  210.                                         break;
  211.  
  212.                                     case    'o':
  213.                                         goto Ok;
  214.  
  215.                                     case    'c':
  216.                                         goto Cancel;
  217.                                 }
  218.                                 break;
  219.                         }
  220.                     }
  221.                 } while ( running );
  222.             }
  223.         }
  224.     }
  225.  
  226.     if ( dpWnd )           CloseWindow( dpWnd );
  227.     if ( dpGList )         FreeGadgets( dpGList );
  228.  
  229.     dpWnd     = 0l;
  230.     dpGList   = 0l;
  231.  
  232.     if ( ok ) {
  233.         CopyMem(( void * )&dpPens[0], ( void * )&MainDriPen[0], NUMDRIPENS << 1);
  234.         MainDriPen[ NUMDRIPENS ] = ~0;
  235.         ok = ReOpenScreen( FALSE );
  236.         Saved = FALSE;
  237.     }
  238.  
  239.     ClearMsgPort( MainWindow->UserPort );
  240.  
  241.     return( ok );
  242. }
  243.